import Model from '../ModelAlgorithm'

function algorithm(arr) {
  console.log('当前调用选择排序：')

  var len = arr.length
  var minIndex, temp
  for (var i = 0; i < len; i++) {
    minIndex = i
    for (var j = i + 1; j < len; j++) {
      // 找到最小（最大）元素所在的下标
      if (arr[j] < arr[minIndex]) {
        minIndex = j
      }
    }
    // 交换过程，将最小的那个元素移动到排序区的最后
    temp = arr[i]
    arr[i] = arr[minIndex]
    arr[minIndex] = temp
    console.log(arr)
  }
  return arr
}

function description() {
  return {
    title: '选择排序(Selection)',
    desc: [
      '每次从后面的未排序区中找到最大（最小）的元素排到排序区的最后',
      '非常擅长TopN计算',
      '它的时间复杂度比较稳定，比较适合少数据量的排序计算',
    ],
  }
}

export default (runner) => {
  const entity = new Model(algorithm, description())
  runner.injectAlgorithm('selection', entity)
}
